/**
 * @file 用户凭据 Realm 模型
 * @description 定义用户凭据的 Realm 数据模型，用于密码管理器功能
 * @author AI Assistant
 * @version 1.0.0
 * @since 2025-10-22
 */

import Realm from 'realm'

/**
 * 用户凭据 Realm 模型类
 */
export class UserCredentialModel extends Realm.Object<UserCredentialModel> {
  _id!: Realm.BSON.ObjectId
  /** 兼容渲染层的数值ID（自增） */
  id?: number
  /** 网站域名或应用标识 */
  domain!: string
  /** 网站名称或应用名称 */
  site_name?: string | null
  /** 用户名 */
  username!: string
  /** 加密后的密码 */
  encrypted_password!: string
  /** 加密使用的盐值 */
  salt!: string
  /** 网站图标URL */
  favicon_url?: string | null
  /** 是否启用自动填充 */
  auto_fill_enabled!: boolean
  /** 是否已同步到服务器 */
  is_synced!: boolean
  /** 服务器端ID（用于同步） */
  server_id?: string | null
  /** 最后使用时间 */
  last_used_at?: Date | null
  /** 创建时间 */
  created_at!: Date
  /** 更新时间 */
  updated_at!: Date

  static schema: Realm.ObjectSchema = {
    name: 'UserCredential',
    primaryKey: '_id',
    properties: {
      _id: 'objectId',
      // 为了兼容现有渲染层类型，保留一个可选的数值ID，并建立索引
      id: { type: 'int', optional: true, indexed: true },
      domain: { type: 'string', indexed: true },
      site_name: 'string?',
      username: 'string',
      encrypted_password: 'string',
      salt: 'string',
      favicon_url: 'string?',
      auto_fill_enabled: { type: 'bool', default: true },
      is_synced: { type: 'bool', default: false },
      server_id: 'string?',
      last_used_at: 'date?',
      created_at: 'date',
      updated_at: 'date'
    }
  }
}

/**
 * 用户凭据创建输入类型
 */
export interface CreateUserCredentialInput {
  domain: string
  site_name?: string
  username: string
  password: string // 明文密码
  favicon_url?: string
  auto_fill_enabled?: boolean
}

/**
 * 用户凭据更新输入类型
 */
export interface UpdateUserCredentialInput {
  id: string
  site_name?: string
  username?: string
  password?: string // 明文密码
  favicon_url?: string
  auto_fill_enabled?: boolean
}

/**
 * 用户凭据查询参数类型
 */
export interface QueryUserCredentialParams {
  domain?: string
  username?: string
  site_name?: string
  auto_fill_enabled?: boolean
  is_synced?: boolean
  limit?: number
  offset?: number
  sortBy?: 'domain' | 'username' | 'last_used_at' | 'created_at' | 'updated_at'
  sortOrder?: 'asc' | 'desc'
}

/**
 * 解密后的用户凭据类型
 */
export interface DecryptedUserCredential {
  _id: string
  id?: number
  domain: string
  site_name?: string | null
  username: string
  password: string // 明文密码
  favicon_url?: string | null
  auto_fill_enabled: boolean
  is_synced: boolean
  server_id?: string | null
  last_used_at?: Date | null
  created_at: Date
  updated_at: Date
}
/**
 * 密码管理器设置类型
 */
export interface PasswordManagerSettings {
  /** 是否启用密码管理器 */
  enabled: boolean
  /** 是否启用自动填充 */
  auto_fill_enabled: boolean
  /** 是否启用保存密码提示 */
  save_prompt_enabled: boolean
  /** 是否启用跨设备同步 */
  sync_enabled: boolean
}

/**
 * 数据库操作结果类型
 */
export interface DatabaseResult<T = any> {
  success: boolean
  data?: T
  error?: string
  count?: number
}
